import { getToken, clearToken, clearUserId } from '@/mixins/info';
import { toast } from '@/utils/util';

interface ExtraParams {
  /** 当前页 */
  pageNum?: number;
  /** 分页大小 */
  pageSize?: number;
}

interface AccountData {
  /** 当前页 */
  account?: {
    accountId: string;
  };
}

export interface RequestConfig {
  /** 请求地址 */
  url: string;
  /** 请求参数 */
  params?: any;
  /** 请求类型 */
  method?: 'POST' | 'GET';
  /** 分页参数 */
  extraParams?: ExtraParams;
  /** account参数 */
  accountData?: AccountData;
  /** 是否不提示 */
  noToast?: boolean;
  /** 是否把所有数据都透传页面处理，默认false */
  flagRes?: boolean;
  /** true不显示Loading */
  noLoading?: boolean;
}

const showLoading = () => {
  // #ifdef MP-WEIXIN
  // @ts-ignore
  wx.showLoading({
    title: '加载中',
  });
  // #endif
  // #ifdef H5
  uni.showLoading({
    title: '加载中',
  });
  // #endif
}
const hideLoading = () => {
  // #ifdef MP-WEIXIN
  // @ts-ignore
  wx.hideLoading({
    noConflict: true,
  });
  console.log('hideLoading-------')
  // #endif

  // #ifdef H5
  uni.hideLoading();
  // #endif
}
// const baseUrl = 'http://192.168.1.3:8888';
// const baseUrl = 'http://218.78.6.209:8888';
const baseUrl = import.meta.env.VITE_VUE_APP_URL;
let numLoad = ref(0);

const request = (config: RequestConfig) => {
  return new Promise((resolve, reject) => {
    const datas: any = {
      data: config.params,
    };
    if (config.extraParams) {
      datas.pageNo = config.extraParams.pageNum;
      datas.pageSize = config.extraParams.pageSize;
    }
    if (config.accountData) {
      datas.account = config.accountData.account;
    }
    console.log('config====', baseUrl, import.meta.env.VITE_VUE_APP_CHANNEL, config);
    if (!config.noLoading) {
      numLoad.value++;
      showLoading();
    }
    const url = config.url.includes('http://') ? config.url : `${baseUrl}${config.url}`;
    uni.request({
      url: url,
      method: 'POST',
      header: {
        'Content-Type': 'application/json',
        encryptFlag: 'N',
        token: getToken(),
        // channelId: '1668560910498168833',
        // channelId: '1669584557472034818',
        // channelId: '1668588213808537601',
        channelId: import.meta.env.VITE_VUE_APP_CHANNEL,
      },
      data: datas,
      success: (res: any) => {
        if (!config.noLoading) {
          numLoad.value--;
          if (numLoad.value <= 0) {
            numLoad.value = 0;
            hideLoading();
          }
        }
        console.log('res====', url, res.data, config.noLoading);
        // token失效
        if (res.data?.businessCode === 'notLogin' || res.data?.businessCode === '104') {
          clearToken();
          clearUserId();
          toast('登录已失效，请重新登录！');
          uni.reLaunch({
            url: `/pages/login/login`,
          });
        } else if (res.data?.businessCode === '1') {
          if (config.flagRes) {
            resolve(res.data);
          }
          resolve(res.data.data);
        } else {
          if (!config.noToast) {
            toast(res.data.msg);
          }
          reject(res.data);
        }
      },
      fail: (eror: any) => {
        if (!config.noLoading) {
          numLoad.value--;
          if (numLoad.value <= 0) {
            numLoad.value = 0;
            hideLoading();
          }
        }
        if (!config.noToast) {
          toast('网络异常，请稍后重试！');
        }
      },
    });
  });
};

export default request;
